<?php

/**
 * 微信扫码支付
 *
 * @param string    $out_trade_no     商品订单，建议使用 build_order_no()
 * @param string    $product_id       商品ID(必填)
 * @param int       $total_fee        设置订单总金额，只能为整数
 * @param string    $body             设置商品或支付单简要描述
 * @param string    $tag              设置商品标记，代金券或立减优惠功能的参数，说明详见代金券或立减优惠 TODO 不太懂
 *
 * @return bool
 * @link                              https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1
 */

function wxpayQrcode($out_trade_no,$product_id,$total_fee,$body,$tag)
{

    //导入 WxPay.Api.php 类
    import('WxpayAPI.lib.WxPay',EXTEND_PATH,'.Api.php');
    //导入 WxPay.Data.php 类
    import('WxpayAPI.lib.WxPay',EXTEND_PATH,'.Data.php');

    //引入 统一下单输入对象类
    $input = new WxPayUnifiedOrder();

    //获取商品基本信息
    $input->SetOut_trade_no($out_trade_no);  //订单
    $input->SetProduct_id($product_id);         //商品ID
    $input->SetTotal_fee($total_fee);           //设置订单总金额，只能为整数
    $input->SetBody($body);                     //设置商品或支付单简要描述
    $input->SetGoods_tag($tag);                 //设置商品标记，代金券或立减优惠功能的参数，说明详见代金券或立减优惠
    $input->SetTime_start(date("YmdHis"));
    $input->SetTime_expire(date("YmdHis", time() + 600));
    $input->SetTrade_type("NATIVE");
    $input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php");

    if($input->GetTrade_type() == "NATIVE")
    {
       $reseult  = WxPayApi::unifiedOrder($input);
       if($reseult["return_code"] == "SUCCESS"){
            return $reseult;
       }else{
           return false;
       }
    }

}

/**
 * 微信订单查询
 * 注：微信订单号和商户订单号选少填一个，微信订单号优先
 *
 * @param string    $transaction_id       微信订单号
 * @param string    $out_trade_no         商户订单号
 *
 * @return array
 * @link                                  https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1
 */
function wxpayQuery($transaction_id,$out_trade_no)
{
    //导入 WxPay.Api.php 类
    import('WxpayAPI.lib.WxPay',EXTEND_PATH,'.Api.php');
    //导入 WxPay.Data.php 类
    import('WxpayAPI.lib.WxPay',EXTEND_PATH,'.Data.php');

    $input = new WxPayOrderQuery();
    $input->SetTransaction_id($transaction_id);
    $input->SetOut_trade_no($out_trade_no);
    return WxPayApi::orderQuery($input);
}

/**
 * 订单退款
 * 需要配置中有证书，微信订单号和商户订单号选少填一个，微信订单号优先
 *
 * @param string    $transaction_id       微信订单号
 * @param string    $out_trade_no         商户订单号
 * @param string    $total_fee            订单总金额(分)
 * @param int       $refund_fee           退款金额(分)
 *
 * @return array
 * @link                                  https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_4
 */
function wxpayRefund($transaction_id,$out_trade_no,$total_fee,$refund_fee)
{

    //导入 WxPay.Api.php 类
    import('WxpayAPI.lib.WxPay',EXTEND_PATH,'.Api.php');
    //导入 WxPay.Data.php 类
    import('WxpayAPI.lib.WxPay',EXTEND_PATH,'.Data.php');
    $input = new WxPayRefund();
    $input->SetTransaction_id($transaction_id);
    $input->SetOut_trade_no($out_trade_no);
    $input->SetTotal_fee($total_fee);
    $input->SetRefund_fee($refund_fee);
    $input->SetOut_refund_no(WxPayConfig::MCHID.date("YmdHis"));
    $input->SetOp_user_id(WxPayConfig::MCHID);
    return WxPayApi::refund($input);
}

/**
 * 微信支付 - 退款查询
 * 微信订单号、商户订单号、微信订单号、微信退款单号选填至少一个，微信退款单号优先：
 *
 * @param string    $transaction_id       微信订单号
 * @param string    $out_trade_no         商户订单号
 * @param string    $out_refund_no        商户退款单号
 * @param string    $refund_id            微信退款单号
 *
 * @return array
 * @link                                  https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_5
 */
function wxpayRefundQuery($transaction_id='',$out_trade_no='',$out_refund_no='',$refund_id='')
{
    //导入 WxPay.Api.php 类
    import('WxpayAPI.lib.WxPay',EXTEND_PATH,'.Api.php');
    //导入 WxPay.Data.php 类
    import('WxpayAPI.lib.WxPay',EXTEND_PATH,'.Data.php');
    $input = new WxPayRefundQuery();
    $input->SetTransaction_id($transaction_id);     //微信订单号
    $input->SetOut_trade_no($out_trade_no);         //商户订单号
    $input->SetOut_refund_no($out_refund_no);       //商户退款单号
    $input->SetRefund_id($refund_id);               //微信退款单号

    return WxPayApi::refundQuery($input);
}

/**
 * 下载订单
 *
 * @param $bill_date        对账日期:为8位数，如：20170919
 * @param $bill_type        账单类型:ALL 所有订单信息 | 成功支付的订单 SUCCESS | 退款订单 REFUND | 撤销的订单 REVOKED
 *
 * @return                  返回的是文本形式 TODO
 * @link                    https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_6
 */
function wxpayDownload($bill_date,$bill_type)
{
    //导入 WxPay.Api.php 类
    import('WxpayAPI.lib.WxPay',EXTEND_PATH,'.Api.php');
    //导入 WxPay.Data.php 类
    import('WxpayAPI.lib.WxPay',EXTEND_PATH,'.Data.php');
    $input = new WxPayDownloadBill();
    $input->SetBill_date($bill_date);       //对账日期
    $input->SetBill_type($bill_type);       //账单类型
    $file = WxPayApi::downloadBill($input);
    echo $file;
    //TODO 对账单文件处理
    exit(0);
}

